﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using skhukb.DB;

namespace skhukb.BL
{
    public class 현재사용자
    {
        const string 임시비밀번호 = "!@#$";
        private static 사용자 손님 = new 사용자 {ID = 0, 로그인ID = "손님", 관리자 = false, 이름 = ""};

        public static 사용자 사용자
        {
            get
            {
                var temp = (사용자)HttpContext.Current.Session[Consts.CURRENT_USER];
                if (temp == null) {
                    int 사용자ID = 0;
                    int.TryParse(HttpContext.Current.User.Identity.Name, out 사용자ID);
                    if (사용자ID > 0) {
                        using (var db = new DBDataContext()) {
                            temp = db.사용자.FirstOrDefault(p => p.ID == 사용자ID);
                            HttpContext.Current.Session[Consts.CURRENT_USER] = temp;
                        }
                    }
                }
                return temp ?? 손님;
            }
            set
            {
                HttpContext.Current.Session[Consts.CURRENT_USER] = value;
            }
        }

        public static void 로그인(사용자 user)
        {
            FormsAuthentication.SetAuthCookie(user.ID.ToString(), false);
            현재사용자.사용자 = user;
            로그기록관리.로그인_기록(user.ID);
        }

        public static void 로그아웃()
        {
            로그기록관리.로그아웃_기록(현재사용자.사용자.ID);
            FormsAuthentication.SignOut();
            현재사용자.사용자 = null;
        }

        public static bool Forest로그인(string 사용자ID)
        {
            using (var db1 = new SkhukisDBDataContext()) {
                var r = db1.COR_SKHUKB_LOGIN_SELECT('1', 사용자ID, "").FirstOrDefault();
                if (r == null) return false;
                using (var db = new DBDataContext()) {
                    var user = db.사용자.FirstOrDefault(p => p.로그인ID == 사용자ID);
                    if (user == null) {
                        user = new 사용자 { 로그인ID = 사용자ID, 관리자 = false, 이름 = r.StaffName, 전산소 = false, 비밀번호 = 임시비밀번호 };
                        db.사용자.InsertOnSubmit(user);
                        db.SubmitChanges();
                        로그기록관리.계정생성_기록(user.ID, user.로그인ID);
                    }
                    현재사용자.로그인(user);
                    return true;
                }
            }
        }

        public static bool Forest로그인(string 사용자ID, string 비밀번호, out string 에러메시지)
        {
            using (var db1 = new SkhukisDBDataContext()) {
                var r = db1.COR_SKHUKB_LOGIN_SELECT('2', 사용자ID, 비밀번호).FirstOrDefault();
                if (r == null) {
                    r = db1.COR_SKHUKB_LOGIN_SELECT('1', 사용자ID, "").FirstOrDefault();
                    에러메시지 = (r == null) ? Consts.사용자ID오류 : Consts.비밀번호오류;
                    return false;
                }
                using (var db = new DBDataContext()) {
                    var user = db.사용자.FirstOrDefault(p => p.로그인ID == 사용자ID);
                    if (user == null) {
                        user = new 사용자 { 로그인ID = 사용자ID, 관리자 = false, 이름 = r.StaffName, 전산소 = false, 비밀번호 = 비밀번호 };
                        db.사용자.InsertOnSubmit(user);
                        db.SubmitChanges();
                        로그기록관리.계정생성_기록(user.ID, user.로그인ID);
                    } else {
                        if (user.비밀번호 != 비밀번호) user.비밀번호 = 비밀번호;
                        db.SubmitChanges();
                    }
                    현재사용자.로그인(user);
                    에러메시지 = "";
                    return true;
                }
            }
        }

        public static bool Is로그인상태
        {
            get
            {
                return 현재사용자.사용자 != null && 현재사용자.사용자 != 손님;
            }
        }
    }
}